16 #ifdef __MSP430_HAS_EUSCI_Ax__
21 bool EUSCI_A_UART_init(uint16_t baseAddress, EUSCI_A_UART_initParam *
param)
26 HWREG16(baseAddress + OFS_UCAxCTLW0) |= UCSWRST;
29 HWREG16(baseAddress + OFS_UCAxCTLW0) &= ~UCSSEL_3;
30 HWREG16(baseAddress + OFS_UCAxCTLW0) |= (uint16_t)
param->selectClockSource;
33 HWREG16(baseAddress + OFS_UCAxCTLW0) &= ~UCMSB;
34 HWREG16(baseAddress + OFS_UCAxCTLW0) |=
param->msborLsbFirst;
37 HWREG16(baseAddress + OFS_UCAxCTLW0) &= ~UCSPB;
38 HWREG16(baseAddress + OFS_UCAxCTLW0) |=
param->numberofStopBits;
41 switch (
param->parity){
42 case EUSCI_A_UART_NO_PARITY:
44 HWREG16(baseAddress + OFS_UCAxCTLW0) &= ~UCPEN;
46 case EUSCI_A_UART_ODD_PARITY:
48 HWREG16(baseAddress + OFS_UCAxCTLW0) |= UCPEN;
49 HWREG16(baseAddress + OFS_UCAxCTLW0) &= ~UCPAR;
51 case EUSCI_A_UART_EVEN_PARITY:
53 HWREG16(baseAddress + OFS_UCAxCTLW0) |= UCPEN;
54 HWREG16(baseAddress + OFS_UCAxCTLW0) |= UCPAR;
59 HWREG16(baseAddress + OFS_UCAxBRW ) =
param->clockPrescalar;
61 HWREG16(baseAddress + OFS_UCAxMCTLW) = ((
param->secondModReg <<8)
62 + (
param->firstModReg <<4) +
param->overSampling );
65 HWREG16(baseAddress + OFS_UCAxCTLW0) &= ~(UCSYNC +
71 HWREG16(baseAddress + OFS_UCAxCTLW0) |=
param->uartMode ;
74 HWREG16(baseAddress + OFS_UCAxCTLW0) &= ~(UCRXEIE + UCBRKIE + UCDORM +
80 void EUSCI_A_UART_transmitData ( uint16_t baseAddress,
85 if (!(
HWREG16(baseAddress + OFS_UCAxIE) & UCTXIE)){
87 while (!(
HWREG16(baseAddress + OFS_UCAxIFG) & UCTXIFG));
93 uint8_t EUSCI_A_UART_receiveData (uint16_t baseAddress)
96 if (!(
HWREG16(baseAddress + OFS_UCAxIE) & UCRXIE)){
98 while (!(
HWREG16(baseAddress + OFS_UCAxIFG) & UCRXIFG));
101 return (
HWREG16(baseAddress + OFS_UCAxRXBUF)) ;
104 void EUSCI_A_UART_enableInterrupt (uint16_t baseAddress,
110 locMask = (mask & (EUSCI_A_UART_RECEIVE_INTERRUPT
111 | EUSCI_A_UART_TRANSMIT_INTERRUPT
112 | EUSCI_A_UART_STARTBIT_INTERRUPT
113 | EUSCI_A_UART_TRANSMIT_COMPLETE_INTERRUPT));
115 HWREG16(baseAddress + OFS_UCAxIE) |= (uint16_t)locMask;
117 locMask = (mask & (EUSCI_A_UART_RECEIVE_ERRONEOUSCHAR_INTERRUPT
118 | EUSCI_A_UART_BREAKCHAR_INTERRUPT));
119 HWREG16(baseAddress + OFS_UCAxCTLW0) |= (uint16_t)locMask;
122 void EUSCI_A_UART_disableInterrupt (uint16_t baseAddress,
128 locMask = (mask & (EUSCI_A_UART_RECEIVE_INTERRUPT
129 | EUSCI_A_UART_TRANSMIT_INTERRUPT
130 | EUSCI_A_UART_STARTBIT_INTERRUPT
131 | EUSCI_A_UART_TRANSMIT_COMPLETE_INTERRUPT));
132 HWREG16(baseAddress + OFS_UCAxIE) &= (uint16_t)~locMask;
134 locMask = (mask & (EUSCI_A_UART_RECEIVE_ERRONEOUSCHAR_INTERRUPT
135 | EUSCI_A_UART_BREAKCHAR_INTERRUPT));
136 HWREG16(baseAddress + OFS_UCAxCTLW0) &= (uint16_t)~locMask;
139 uint8_t EUSCI_A_UART_getInterruptStatus (uint16_t baseAddress,
142 return (
HWREG16(baseAddress + OFS_UCAxIFG) & mask );
145 void EUSCI_A_UART_clearInterrupt (uint16_t baseAddress, uint16_t mask)
148 HWREG16(baseAddress + OFS_UCAxIFG) &= ~(mask);
151 void EUSCI_A_UART_enable (uint16_t baseAddress)
154 HWREG16(baseAddress + OFS_UCAxCTLW0) &= ~(UCSWRST);
157 void EUSCI_A_UART_disable (uint16_t baseAddress)
160 HWREG16(baseAddress + OFS_UCAxCTLW0) |= UCSWRST;
163 uint8_t EUSCI_A_UART_queryStatusFlags (uint16_t baseAddress,
166 return (
HWREG16(baseAddress + OFS_UCAxSTATW) & mask );
169 void EUSCI_A_UART_setDormant (uint16_t baseAddress)
171 HWREG16(baseAddress + OFS_UCAxCTLW0) |= UCDORM;
174 void EUSCI_A_UART_resetDormant (uint16_t baseAddress)
176 HWREG16(baseAddress + OFS_UCAxCTLW0) &= ~UCDORM;
179 void EUSCI_A_UART_transmitAddress (uint16_t baseAddress,
183 HWREG16(baseAddress + OFS_UCAxCTLW0) |= UCTXADDR;
189 void EUSCI_A_UART_transmitBreak (uint16_t baseAddress)
192 HWREG16(baseAddress + OFS_UCAxCTLW0) |= UCTXBRK;
195 if (EUSCI_A_UART_AUTOMATIC_BAUDRATE_DETECTION_MODE ==
196 (
HWREG16(baseAddress + OFS_UCAxCTLW0) &
197 EUSCI_A_UART_AUTOMATIC_BAUDRATE_DETECTION_MODE)){
198 HWREG16(baseAddress + OFS_UCAxTXBUF) = EUSCI_A_UART_AUTOMATICBAUDRATE_SYNC;
200 HWREG16(baseAddress + OFS_UCAxTXBUF) = DEFAULT_SYNC;
204 if (!(
HWREG16(baseAddress + OFS_UCAxIE) & UCTXIE)){
206 while (!(
HWREG16(baseAddress + OFS_UCAxIFG) & UCTXIFG));
210 uint32_t EUSCI_A_UART_getReceiveBufferAddress (uint16_t baseAddress)
212 return ( baseAddress + OFS_UCAxRXBUF );
215 uint32_t EUSCI_A_UART_getTransmitBufferAddress (uint16_t baseAddress)
217 return ( baseAddress + OFS_UCAxTXBUF );
220 void EUSCI_A_UART_selectDeglitchTime(uint16_t baseAddress,
221 uint16_t deglitchTime
224 HWREG16(baseAddress + OFS_UCAxCTLW1) &= ~(UCGLIT1 + UCGLIT0);
226 HWREG16(baseAddress + OFS_UCAxCTLW1) |= deglitchTime;
MPU_initThreeSegmentsParam param